package br.lsi.supercurriculum.daos;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.lsi.supercurriculum.entidades.Pessoa;
import br.lsi.supercurriculum.entidades.Profissional;
import br.lsi.supercurriculum.entidades.Usuario;
import br.lsi.supercurriculum.interfaces.PessoaDao;
import br.lsi.supercurriculum.interfaces.ProfissionalDao;
import br.lsi.supercurriculum.util.HibernateUtil;

/**
 * @author Dannylo Johnathan
 * @since 21/08/2012
 */

/**
 * Cla
 * sse de persistência da entidade Pessoa
 */

//TODO: Inserir booleano "saved" na entidade Pessoa e modificar estratégia de negócio.. até às 14:00hrs

public class ProfissionalDaoImpl implements ProfissionalDao {

	@Override
	public void salvarOuAtualizar(Profissional profissional) {
		Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        if(profissional.getId()== null){
        	session.save(profissional);
        } else{
        	session.update(profissional);
        }
        t.commit();
	}

	@Override
	public Profissional getProfissional(Usuario usuario) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Criteria c = session.createCriteria(Pessoa.class);
		c.createCriteria("usuario").add(Restrictions.like("username", '%' + usuario.getUsername() + '%'));
		return (Profissional) c.uniqueResult();
	}

	@Override
	public List<Profissional> listarProfissionais() {
		 Session session = HibernateUtil.getSessionFactory().openSession();
	     Criteria c = session.createCriteria(Profissional.class);
	     return c.list();
	}

	@Override
	public void excluir(Profissional profissional) {
		Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        session.delete(profissional);
        t.commit();
		
	}

}
